/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"535E4B09-2883-4E1E-ABAC-3B70B45630CB",variableType:4}
 */
var es_nro_manual = 0;

/**
 * @properties={typeid:24,uuid:"7EB7628B-626A-4465-A6CB-1261D0008A9F"}
 * @AllowToRunInFind
 */
function confirmar()
{
	esconderErrores()
	// VALIDACIONES	
	var $error = 0
	if (!cliente_id)
	{
		elements.lbl_error_cliente.visible = true
		$error = 1
	}
	else
	{
		totalizar();
		var $credito = 0
		if (ped_cabecera_to_clientes.credito_asignado)
			$credito = ped_cabecera_to_clientes.credito_asignado
		if ($credito != -1 && total > $credito)
		{
			globals.DIALOGS.showWarningDialog('Aviso','El total excede el crédito del cliente','OK')
			return false;
		}
	}
	if (!fecha)
	{
		elements.lbl_error_fecha.visible = true
		$error = 1
	}
	if (total <= 0)
	{
		elements.lbl_error_total.visible = true
		$error = 1
	}
	if (!cond_pago_id)
	{
		elements.lbl_error_cond_pago.visible = true
		$error = 1
	}
	if (es_nro_manual && !nro_pedido)
	{
		elements.lbl_error_nro_pedido.visible = true
		$error = 1
	}

	// ELIMINAR RENGLONES en BLANCO
	var i = 1;
	while (i <= ped_cabecera_to_ped_detalle.getSize())
	{
		var $rcd = ped_cabecera_to_ped_detalle.getRecord(i)
		$rcd.msj_error = ''
		if ($rcd.producto_id == null)
		{
			ped_cabecera_to_ped_detalle.deleteRecord(i)
		}
		else
		{
			if (!$rcd.cantidad)
			{
				$rcd.msj_error = '-Cantidad '
				$error = 1
			}
			if (!$rcd.precio_unitario)
			{
				$rcd.msj_error += '-P Unit.'
				$error = 1
			}
			i++
		}
	}	
	if ($error)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Por favor, complete todos los campos obligatorios','OK')
		return false
	}	
	
	// GRABA DOMICILIO INGRESADO
	if (cli_domicilios_id == null)
	{   
		if (entrega_entre_calles==null && entrega_descripcion==null && entrega_localidad==null && entrega_lugar==null &&	entrega_observaciones==null &&  entrega_provincia_id==null && entrega_telefono==null )
		{ // no lleno domicilio
			if (retira == 0) //si no retira hay que entregarlo en alguna direccion
		 	{
				var resp = globals.DIALOGS.showQuestionDialog('Aviso', "El cliente no retira, ¿Informa Domicilio de Entrega ?", "Si" , "No");
				if (resp == "Si")
				{
					elements.tabs_20.tabIndex = 2;
					return false; 
				}
			}
		}
		else
		{ // graba
			if ( entrega_entre_calles && entrega_localidad && entrega_provincia_id && entrega_telefono && entrega_lugar)
			{
				ped_cabecera_to_clientes.clientes_to_cli_domicilios.newRecord();
				ped_cabecera_to_clientes.clientes_to_cli_domicilios.descripcion		= entrega_descripcion
				ped_cabecera_to_clientes.clientes_to_cli_domicilios.entre_calles	= entrega_entre_calles;
				ped_cabecera_to_clientes.clientes_to_cli_domicilios.localidad		= entrega_localidad;
				ped_cabecera_to_clientes.clientes_to_cli_domicilios.calle			= entrega_lugar;
				ped_cabecera_to_clientes.clientes_to_cli_domicilios.provincia_id	= entrega_provincia_id;
				ped_cabecera_to_clientes.clientes_to_cli_domicilios.telefonos		= entrega_telefono;
				ped_cabecera_to_clientes.clientes_to_cli_domicilios.observaciones	= entrega_observaciones;
			}
			else
			{
				globals.DIALOGS.showWarningDialog('Aviso','Por favor complete la dirección de entrega','OK')
				elements.tabs_20.tabIndex = 2;
				return false
			}
		}
	}	
	if (presup_cabecera_id)
	{
		ped_cabecera_to_presup_cabecera.presup_estado =  globals.zconf_presup_aceptado
	}
	// DATOS CABECERA
	ped_estado 	= globals.zconf_ped_ingresado
	tipo 		= globals.zconf_tipo_mayorista

	// NUMERACION
	var $nro_aux
    if (es_nro_manual == 0)   //no es manual
    {
    	var fs_nro_ped = databaseManager.getFoundSet(databaseManager.getDataSourceServerName(controller.getDataSource()),'numeracion_cl')
		fs_nro_ped.find()
		fs_nro_ped.sucursal			= sucursal
		fs_nro_ped.letra			= letra
		fs_nro_ped.cod_comprobante	= globals.zconf_numeracion_pedido //13
		var found = fs_nro_ped.search()
		if (found != 1)
	    {
		   globals.DIALOGS.showWarningDialog('Aviso','Sucursal o Letra o Tipo de comprobante incorrectos','OK');
		   return false;  
	    }
	    $nro_aux = fs_nro_ped.ultimo_numero + 1
    }
    else
    {
    	$nro_aux = nro_pedido
    }
    if (globals.pedidos_duplicacion(letra,sucursal,$nro_aux) != 0)
    {
    	globals.DIALOGS.showWarningDialog('Aviso','El pedido ya existe. Modifique el número del mismo','OK');
    	return false;
    }
    
    importe_en_letras 	= globals.nro_a_letra(total);
    
    if (es_nro_manual == 0)
    {
    	fs_nro_ped.ultimo_numero = fs_nro_ped.ultimo_numero + 1
		nro_pedido = $nro_aux;
    }
    
	// GRABAR TODO
	databaseManager.startTransaction()
	var estado = databaseManager.saveData()
	if (estado == true)
	{
		if (databaseManager.commitTransaction())
		{
			//  MENSAJE FINAL 
			var $msj = 'Pedido Nº ' + nro_pedido + '\nGenerado correctamente'
			globals.DIALOGS.showInfoDialog('Aviso',  $msj,  "OK" );
			var $params = {
				pFacturaId 		: ped_cabecera_id,
				pRazonSocial 	: usuarios_to_uservs.razon_social,
				pDireccion		: usuarios_to_uservs.calle_nro,
				pCodPostal		: usuarios_to_uservs.cod_postal,
				pCuit			: usuarios_to_uservs.cuit,
				pCodBrutos		: usuarios_to_uservs.cod_ing_brutos,
				pIva			: usuarios_to_uservs.uservs_to_tipo_iva.tipo_iva_desc,
				pActividad		: usuarios_to_uservs.actividad,
				pTelefono		: usuarios_to_uservs.telefono,
				pEmail			: usuarios_to_uservs.email,
				pInicioActividad : usuarios_to_uservs.inicio_actividad,
				pIconoURL		: usuarios_to_uservs.url_logo,
				pPie			: usuarios_to_uservs.pie_factura
			}
			globals.metodoJasper('impresion', 'ventas/pedidos.jasper', 'Pedido_' + ped_cabecera_id, 'infocom', $params)
			iniciar()
		}
		else
		{
			databaseManager.rollbackTransaction()
			databaseManager.revertEditedRecords()
			globals.DIALOGS.showWarningDialog('Aviso','No pudo guardarse por un error en la base de datos','OK')
			iniciar()
		}
	}
	else
	{
		databaseManager.rollbackTransaction()
		globals.DIALOGS.showWarningDialog('Aviso', ' Pedido No fue generado - Revise los datos ingresados',  "OK")
	}
	return true
}

/**
 * @properties={typeid:24,uuid:"AE85A6E2-179F-4F48-B030-D91A4497E893"}
 */
function esconderErrores()
{
	elements.lbl_error_cliente.visible 			= false
	elements.lbl_error_cond_pago.visible 		= false
	elements.lbl_error_fecha.visible 			= false
	elements.lbl_error_total.visible 			= false
	elements.lbl_error_nro_pedido.visible 		= false
}

/**
 * @returns {Boolean} valid value
 *
 * @properties={typeid:24,uuid:"FC8095C3-217E-4D2C-B0F8-4601A8C6CE92"}
 */
function ver_cond_iva_cliente() 
{
	if (globals.gTipo_iva_emisor == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Revise condición de iva del emisor','OK')
		return false;
	}
	letra = ped_cabecera_to_clientes.clientes_to_relacion_iva_letra.rel_iva_letra;
	if (letra == null) 
	{
		globals.DIALOGS.showWarningDialog('Aviso','Revise condición de iva en el cliente ','OK')
		return false;	
	}
	return true
}

/**
 * @returns {Boolean} allow hide
 *
 * @properties={typeid:24,uuid:"C6661959-EE4F-4995-8AC5-A6C930B50C6E"}
 */
function salir_fac() 
{  
	if (cliente_id != null)
	{
   		var resp = globals.DIALOGS.showQuestionDialog( 'Confirma',  '¿Seguro que desea salir?' ,  'Si', 'No')
		if (resp == 'Si')
		{
			databaseManager.revertEditedRecords();
			databaseManager.setAutoSave(true)
			return true;
		}
		else
			return false;
	}
	else
	{	
		databaseManager.revertEditedRecords();
		databaseManager.setAutoSave(true)
		return true;
	}
}

/**
 * @properties={typeid:24,uuid:"CDDC3CBC-C7E2-4484-A319-7385E72F4BF3"}
 */
function Cancelar() 
{
	databaseManager.revertEditedRecords();
	iniciar();
}

/**
 * @properties={typeid:24,uuid:"42FC6A24-EFF4-48DA-958B-C73F26581E69"}
 */
function eliminar_renglon() 
{
	var found = ped_cabecera_to_ped_detalle.getSize()
	if (found==0)
	{
		globals.iva_del_producto=null;
		descuento=null
	    iva1_imp=null
	    iva1_porc=null
	    subtotal1=null
	    subtotal2=null
	    total=null
	}
	else
	{
		var resp = globals.DIALOGS.showQuestionDialog( 'Confirma',  '¿Seguro que desea dar de baja? ',  'Si', 'No')
		if (resp == 'Si')
		{
			ped_cabecera_to_ped_detalle.deleteRecord();
			
			totalizar(); // recalcula los totales
			found = ped_cabecera_to_ped_detalle.getSize();
			if (found==0)
			{
			globals.iva_del_producto=null;
			descuento=null;
		    iva1_imp=null;
		    iva1_porc=null;
		    subtotal1=null;
		    subtotal2=null;
		    total=null;
			}		
		}
	}
}

/**
 * @properties={typeid:24,uuid:"975B097E-7870-4394-BE87-81314F1131AC"}
 */
function agregar_renglon() 
{
	if (cliente_id != null)
	{
		forms.pedidos[elements.tabs_20.getTabRelationNameAt(elements.tabs_20.tabIndex)].newRecord(false);
		forms.pedidos_1.elements.fld_producto_id.requestFocus();
	}
	else
	{
		globals.DIALOGS.showWarningDialog('Aviso','Debe elegir cliente primero','OK')
	}	
}

/**
 * Handle changed data.
 *
 * @param {Object} [oldValue] old value
 * @param {Object} [newValue] new value
 * @param {JSEvent} [event] the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"C02F2246-9EAA-4E2B-BD96-A9070F2C22A4"}
 */
function onDataChange_cliente_id(oldValue, newValue, event) 
{
	globals.gCliente = cliente_id;
	
	if (cliente_id)
	{
		//ver_cond_iva_cliente();
		if (ped_cabecera_to_clientes.descuento)
			descuento_porc = ped_cabecera_to_clientes.descuento;
		if (ped_cabecera_to_clientes.cond_pago_id)
		{
			cond_pago_id = ped_cabecera_to_clientes.cond_pago_id;
		}
		if (ped_cabecera_to_clientes.vendedor_id)
			vendedor_id = ped_cabecera_to_clientes.vendedor_id;       
		else 
			vendedor_id = globals.gvendedor;
			
		if (ped_cabecera_to_clientes.bloqueado == 1)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Cliente bloqueado. NO se puede hacer pedido','OK')
			cliente_id = 0
			return true
		}
		if (ped_cabecera_to_clientes.credito_asignado == 0 || ped_cabecera_to_clientes.credito_asignado == null)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Cliente con crédito en cero. NO se puede hacer pedido','OK')
			cliente_id = 0
			return true
		}
		elements.lbl_error_cliente.visible = false
	}
	else
	{
		elements.lbl_error_cliente.visible = true
	}
	if (ped_cabecera_to_ped_detalle.getSize() == 0)
		ped_cabecera_to_ped_detalle.newRecord()
	forms.pedidos_1.elements.fld_producto_id.requestFocus()
	elements.fld_cond_pago_id.enabled = true
	return true
}

/**
 * @properties={typeid:24,uuid:"6000B7DE-E1B1-4D65-A0CA-4F922E24BC5E"}
 */
function iniciar() 
{
	databaseManager.setAutoSave(false);
	controller.newRecord();
	descuento 		= 0;
	var $fecha 		= application.getServerTimeStamp();
	fecha 			= new Date( $fecha.getFullYear(), $fecha.getMonth(), $fecha.getDate(), 0,0,0,0)
	cond_pago_id	= globals.zparam_cond_pago_default;
	flete			= 0;
	retira			= 1;
	entrega_fecha	= application.getServerTimeStamp();
	descuento_porc	= 0;
	vendedor_id		= globals.gvendedor;
	letra			= 'X'
	
	forms.pedidos_entrega.elements.grp_flete.enabled = false
	es_nro_manual	= 0
	
	elements.fld_nro_manual.visible = globals.zparam_fact_nro_manual
	esconderErrores()
	elements.fld_cliente_id.requestFocus()
}

/**
 * @properties={typeid:24,uuid:"1CBACF46-E0BC-4D6A-B02E-6B6B517088E6"}
 */
function alta_cliente() 
{
	//  OJO = c/vez q va al forms.clientes_alta ,x alta o modif. hace rollback y se pierde los cargado la fac.minorista
	databaseManager.revertEditedRecords()
	controller.loadRecords(null);
	
	globals.formEnVentana('clientes_alta','clientes_alta','Alta de Clientes')
	
	iniciar();
	if (globals.gClienteDesde != null)
	{
		cliente_id = globals.gClienteDesde //  global seteada en el form clientes_alta
		onDataChange_cliente_id();
	}
}

/**
 * @properties={typeid:24,uuid:"9FD44735-374D-456B-8CFA-38B788DA9071"}
 */
function totalizar() 
{
	// SUMA RENGLONES
	iva1_imp 		= 0
	iva2_imp 		= 0
	iva3_imp 		= 0
	iva1_porc 		= null
	iva2_porc 		= null
	iva3_porc 		= null
	neto			= 0
	neto2			= 0
	neto3			= 0
	neto_no_gravado = 0
	
	var $tot_iva	= 0
	var $subtotal1 	= 0
	var $cant 		= ped_cabecera_to_ped_detalle.getSize()
	for ( var i = 1 ; i <= $cant ; i++ )
	{
		var $rcd = ped_cabecera_to_ped_detalle.getRecord(i)
		if ($rcd.producto_id)
		{
			$rcd.msj_error = ''
			if (!$rcd.cantidad)
			{
				$rcd.msj_error = '-Cantidad '
			}
			if (!$rcd.precio_unitario)
			{
				$rcd.msj_error += '-P Unit.'
			}
			var $total_r = $rcd.precio_unitario * $rcd.cantidad - $rcd.descuento_importe
			$subtotal1 	+= $total_r
			if ($rcd.ped_detalle_to_productos.grava_iva == 1)
			{
				var $iva	= $total_r * ($rcd.iva_porc / 100)
				agregaIva($rcd.iva_porc, $iva, $total_r)
				$tot_iva += $iva
			}
			else
			{
				neto_no_gravado += $total_r
			}
		}
	}
	subtotal1 		= $subtotal1
	descuento 		= ($subtotal1 * descuento_porc) / 100	 
	subtotal2 		= $subtotal1 - ($subtotal1 * descuento_porc / 100)
	neto 			= neto * (1 - descuento_porc / 100)
	neto2 			= neto2 * (1 - descuento_porc / 100)
	neto3 			= neto3 * (1 - descuento_porc / 100)
	neto_no_gravado = neto_no_gravado * (1 - descuento_porc / 100)
	if (flete == 1)
	{
		subtotal2 += flete_importe
		var $iva_flete = flete_importe * (globals.zparam_flete_iva_porc / 100)
		$tot_iva += $iva_flete
		agregaIva(globals.zparam_flete_iva_porc,$iva_flete,flete_importe)
	}
	// IVA PARA pie de FACTURA 
	if (ped_cabecera_to_clientes.clientes_to_relacion_iva_letra.rel_iva_calcula != 1)
	{ //para exportacion
		total = subtotal2
	}
	else
	{ // para A
		if (ped_cabecera_to_clientes.clientes_to_relacion_iva_letra.rel_iva_discrimina == 1)
		{ //Factura A
			total = subtotal2 + $tot_iva
		}
		else
		{ // Factura B
			total		= subtotal2
		}
	}
	if (total == 0)
	{
		elements.lbl_error_total.visible = true
	}
	else
	{
		elements.lbl_error_total.visible = false
	}
}

/**
 * Handle changed data.
 *
 * @param {Number} oldValue old value
 * @param {Number} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"AA34FCAF-20D7-49A2-BE1A-D05444514C12"}
 */
function onDataChangeNroManual(oldValue, newValue, event) {
	elements.fld_nro_factura.editable = newValue
	elements.fld_nro_factura.requestFocus()
	return true
}

/**
 * @param {Number} porcentaje
 * @param {Number} iva_importe
 * @param {Number} importe_neto
 * 
 * @properties={typeid:24,uuid:"6D18CD81-5C2D-4831-B36E-76D38C7E1AEE"}
 */
function agregaIva(porcentaje, iva_importe, importe_neto)
{
	if (iva1_porc == null)
	{
		iva1_porc 	= porcentaje
		iva1_imp 	= iva_importe
		neto		= importe_neto
	}
	else
	{
		if (porcentaje != iva1_porc)
		{
			if (iva2_porc == null)
			{
				iva2_porc 	= porcentaje
				iva2_imp 	= iva_importe
				neto2		= importe_neto
			}
			else
			{
				if (porcentaje != iva2_porc)
				{
					iva3_porc 	= porcentaje
					iva3_imp 	+= iva_importe
					neto3		+= importe_neto
				}
				else
				{
					iva2_porc 	= porcentaje
					iva2_imp 	+= iva_importe
					neto2		+= importe_neto
				}
			}
		}
		else
		{
			iva1_porc 	= porcentaje
			iva1_imp 	+= iva_importe
			neto		+= importe_neto
		}
	}
}

/**
 * Callback method when the user changes tab in a tab panel or divider position in split pane.
 *
 * @param {Number} previousIndex index of tab shown before the change
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"054E3485-DA15-4F27-B8D9-986FC7060DAB"}
 */
function onTabChange(previousIndex, event) {
	if(elements.tabs_20.tabIndex == 2)
	{
		elements.boton_agregar.visible = false
		elements.boton_eliminar.visible = false
	}
	else
	{
		elements.boton_agregar.visible = true
		elements.boton_eliminar.visible = true
	}
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"0647B415-CE50-4EDE-91AB-C25F8605E47E"}
 */
function buscarPresupuestos(event) {
	if (!cliente_id)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Debe elegir un cliente primero','OK')
		return
	}
	globals.formEnVentana('ped_presup_cab','BUSCAR_PRESUPUESTOS','Presupuestos')
}

/**
 * Handle changed data.
 *
 * @param {Date} oldValue old value
 * @param {Date} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"42BBDCD2-69BD-4EDB-8A57-C19D2B9BBD7F"}
 */
function onDataChangeFecha(oldValue, newValue, event) {
	if (newValue)
	{
		elements.lbl_error_fecha.visible = false
	}
	else
	{
		elements.lbl_error_fecha.visible = true
	}
	return true
}
